Remote desktop sharing involves capturing image frames of a remote desktop and transmitting frames (such as in the form of a video), typically employing an encoder/decoder, to a client desktop. The amount of data representing the captured frames can be extremely large. Further, transmitting digital media information over communication networks can consume large amounts of bandwidth. The cost of transmitting data from one location to another is a function of number of bits transmitted per second. Typically, higher bit transfer rates are associated with increased cost. Higher bit rates can also progressively add to required storage capacities of memory systems, thereby increasing storage cost. Thus, at a given quality level, it can be much more cost effective to use fewer bits, as opposed to more bits, to store digital images and videos.
It therefore can be desirable to compress media data for recording, transmitting, or storing. For a typical compression scheme, achieving higher media quality requires more bits used, which can in turn increase cost of transmission and storage. While lower bandwidth traffic is desired so is higher quality media.
An encoder is a device capable of encoding (e.g., coding) (and sometimes decoding) digital media data. A decoder is a device capable of decoding digital media data. An encoder generally employs a codec for coding and/or decoding digital media data. The term codec is derived from a combination of the terms code and decode, or the terms compress and decompress. A variety of codecs are commercially available. Generally speaking, for example, codec classifications include discrete cosine transfer codecs, fractal codecs, and wavelet codecs. An encoder or codec, by encoding the digital media data, can reduce the number of bits required to transmit signals thereby reducing associated transmission costs.
One part of the encoding process typically involves using motion estimation to facilitate encoding of digital media data. In most cases, consecutive frames in a sequence of frames will be relatively similar except for movement of an object(s) within a frame from one frame to the next frame. Motion estimation techniques take advantage of similarities between consecutive frames in order to more efficiently encode a frame. For instance, an encoder, employing a motion estimation technique, can use a previous frame as a reference frame when encoding a current frame. The encoder generates motion vectors for the current frame based on the reference frame, which can be a reconstructed video frame. The encoder identifies differences between the reference frame and current frame, and codes the portions of the current frame that are different from the reference frame without having to code the portions of the current frame that are unchanged from the reference frame. This can thereby make the encoding process and decoding process more efficient.
Precise motion estimation in frame compression can be desirable to attain desired quality and efficiency of the encoder. Typically, the more precise the motion estimation, the less complicated residual data can be for encoding of digital media content, the lower the bit rate, and the better the encoding quality.
However, the computational complexity of motion estimation generally can be very high, thereby making motion estimation a primary, time-consuming portion of encoding.